package com.hoshino.momochi.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hoshino.momochi.model.domain.User;
import com.hoshino.momochi.model.domain.UserDetails;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface UserMapper extends BaseMapper<User> {

    /**
     * 注册用户
     *
     * @param user
     */
    void registerUser(User user);

    /**
     * 根据username 获取对应的 User
     * 包括 UserDetails
     *
     * @param username 用户名
     * @return User
     */
    User getUserByUserName(@Param("username") String username);

    /**
     * 根据id 将 isDelete 置为 1
     * 注销用户
     *
     * @param id
     */
    void updateById(@Param("id") Long id);

    /**
     * 获取所有用户的用户名
     *
     * @return
     */
    List<String> getAllUsername();

    /**
     * 修改用户名
     *
     * @param username
     */
    void updateUsername(@Param("username") String username);

    /**
     * 修改密码
     *
     * @param password
     */
    void updatePassword(@Param("password") String password, @Param("id") Long id);

    /**
     * 修改用户名和密码
     *
     * @param user
     */
    void updateUsernameAndPassword(User user);

    /**
     * 根据用户id 获取 用户详细信息 以及 关注 和 粉丝 用户信息
     *
     * @param uid
     * @return
     */
    User getFocusAndUserDetails(Long uid);

    /**
     * 检查 指定 id 是否存在
     *
     * @param uid
     * @return
     */
    Long getUserIdById(Long uid);

    /**
     * 删除 isDelete = 1 的数据
     */
    void delIsDeleteAsTrue();

    /**
     * 根据用户id 获取用户信息
     *
     * @return
     */
    UserDetails getUserDetailsByUserId(Long user_id);

    /**
     * 检查 用户是否 注销
     *
     * @param user_id
     * @return
     */
    Long getUserIdByIdAndNoIsDelete(Long user_id);

    /**
     * 获取当前登录用户的 mail
     *
     * @param user_id
     * @return
     */
    String getMailByUserId(Long user_id);
}
